package cn.cloud.service;

import com.github.pagehelper.PageInfo;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * Created by Cloud on 2017/9/24 0024.
 */
public interface BaseService<T> {
    /**
     * 根据id查询数据
     *
     * @param id
     * @return
     */
    public T queryById(Object id);

    /**
     * 查询所有数据
     *
     * @return
     */
    public List<T> queryAll();

    /**
     * 根据条件查询一条数据,如果不止一条会报错
     *
     * @param record
     * @return
     */
    public T queryOne(T record);

    /**
     * 根据条件查询数据列表
     *
     * @param record
     * @return
     */
    public List<T> queryListByWhere(T record);

    /**
     * 根据条件分页查询数据列表
     *
     * @param page
     * @param rows
     * @param record
     * @return
     */
    public PageInfo<T> queryPageListByWhere(Integer page, Integer rows, T record);

    /**
     * 分页查询数据列表
     *
     * @param page
     * @param rows
     * @return
     */
    public PageInfo<T> queryPageList(Integer page, Integer rows);

    /**
     * 新增数据
     *
     * @param t
     * @return
     */
    public Integer add(T t);

    /**
     * 有选择的保存，选择不为null的字段作为插入字段
     *
     * @param t
     * @return
     */
    public Integer addSelective(T t);

    /**
     * 更新数据
     *
     * @param t
     * @return
     */
    public Integer update(T t);

    /**
     * 有选择的更新，选择不为null的字段作为插入字段
     *
     * @param t
     * @return
     */
    public Integer updateSelective(T t);

    /**
     * 根据id删除数据
     *
     * @param id
     * @return
     */
    public Integer deleteById(Object id);

    /**
     * 批量删除
     * @param property 主键字段
     * @param values id值
     * @return
     */
    public Integer deleteByIds(String property, List<Object> values);

    /**
     * 根据条件删除数据
     *
     * @param record
     * @return
     */
    public Integer deleteByWhere(T record);

    /**
     * 根据条件获取记录数
     * @param record
     * @return
     */
    public int queryCount(T record);

    public int queryCountByExample(Example example);
}
